#pragma once
#include <atomic>
#include "cpupin.h"
#include "timestamp.h"

#define SHM_SIZE 64           // 小数据量，容易放入L1缓存
#define MSG_COUNT 1000000     // 消息传递次数

/**
 * 共享数据结构（设计为适合放入L1缓存）
 * 该结构体大小控制在64字节以内，以便完全驻留在CPU的L1缓存行中。
 * 使用volatile关键字防止编译器优化对flag的访问，确保内存可见性。
 */
typedef __attribute__((aligned(64))) struct {
  std::atomic<int> flag;                    // 同步标志：0表示数据未就绪，1表示数据就绪
  int seq_id;                               // 消息序列号，用于验证消息顺序
  uint64_t time_cycles;                     // 时间戳，记录写入时的CPU周期数
  char data[SHM_SIZE - sizeof(uint64_t) - sizeof(int) - sizeof(std::atomic<int>)]; // 实际数据负载
} SharedData;

/**
 * 线程参数结构体
 * 用于向线程传递共享内存指针和目标CPU ID。
 */
typedef struct {
  SharedData* shm;  // 指向共享内存区域的指针
  int cpu_id;       // 要绑定的CPU核心ID
} ThreadArgs;